package a10_动态规划;

/**
 * <p>
 * a46_最大子序和复习2
 * </p>
 *
 * @author flyduck
 * @since 2025/2/28
 */
public class a46_最大子序和复习1 {

    //dp[i]:以nums[i]结尾的最大子序列的和

    //递推公式
    //dp[i]有两种情况
    //延续前面的：dp[i-1] + nums[i]
    //重新开始：nums[i]

    //初始化：dp[0] = nums[0]
    public int maxSubArray(int[] nums) {
        int result = nums[0];

        int[] dp = new int[nums.length];
        dp[0] = nums[0];

        for (int i = 1; i < nums.length; i++) {
            dp[i] = Math.max(dp[i-1] + nums[i], nums[i]);
            result = Math.max(result, dp[i]);
        }

        return result;
    }
}
